home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / graphics / 3dvect37.zip / QB.ZIP / MSTARS.BAS < prev    next >
BASIC Source File  |  1994-06-09  |  5KB  |  198 lines

  1. DECLARE FUNCTION c$ (qq!)
  2. REM This qbasic file will pre-calculate the data needed to make background
  3. REM stars.  The file which uses this calculated data is stars.asm.  If you
  4. REM don't have this assembley file, go to nearest corner of room, hang head
  5. REM and cry.
  6.  
  7. REM to use: qb mstars.bas>stardata.inc
  8.  
  9. REM The data tables are large but it is expected that the asm routine will
  10. REM be fast as a result of the pre-calculated data.
  11.  
  12. REM xa=0 to 1024-1
  13. REM ya=0 to 65536-1
  14.  
  15. REM xl yl zl = xlocation , ylocation...
  16. REM rxa = real x angle (radians)
  17. REM rya = real y angle (rads)
  18. REM t() = theta (y angle,  units: -128 to +127)
  19. REM ya  = theta (y angle,  units: -128 to +127)
  20. REM x1  = x^-1, inverse of where to find x angle in list from rxa
  21. REM xt  = y tolerance at that x angle (255 to 38)
  22.  
  23. REM Revision: June 15/94  Stars tolerance calculation is now sinusoidal.
  24.  
  25. n = 1024: REM number of stars, must be 2^x
  26.  
  27. b$ = "         db  "
  28.  
  29. x$ = "sxl      db  "
  30. y$ = "syl      db  "
  31. z$ = "szl      db  "
  32. t$ = "sya      db  "
  33. q$ = "xn1      db  "
  34. g$ = "tol      db  "
  35.  
  36. r$ = ","
  37.  
  38. fi$ = "         if use_half_stars eq no"
  39. ed$ = "         endif"
  40.  
  41. PRINT ";";
  42. RANDOMIZE
  43. PRINT
  44. PRINT "; random stars list"
  45. PRINT
  46.  
  47. DIM x(n), y(n), z(n), t(n), l(n), x1(n), xt(n)
  48.  
  49.  REM change this tolerance if you change ratiox or xactual or xclipping!!!
  50.  REM these parameters decide the size of clipping depending on
  51.  REM your screen ratio
  52.  
  53.  qlow = 17: qhi = 70: 'You change these to match your screen size! qlow < qhi
  54.  
  55.  xt2 = ATN(SQR(qhi ^ 2 - qlow ^ 2) / qlow) * 180 / 3.141592
  56.  
  57.  FOR xa = 0 TO n - 1
  58.  
  59.    ya = INT(RND * 65535) - 32767
  60.    rya = ya / 65536 * 3.141592 * 2
  61.  
  62.    rxa = TAN((xa - n / 2) / n * ATN(3.141592 / 2) * 2 - 3.141592)
  63.  
  64.    hyp = (qhi * COS(-rxa)) ^ 2 - qlow ^ 2
  65.    IF hyp < 0 THEN xt = 255: GOTO more
  66.    xt = (90 - ATN(SQR(hyp) / qlow) * 180 / 3.141592) / 90 * 256
  67.    IF xt >= xt2 THEN xt = 255
  68. more:
  69.  
  70.    x = 0
  71.    y = 0
  72.    z = 16384 - 1
  73.  
  74.    u = y * COS(rxa) - z * SIN(rxa)
  75.    v = y * SIN(rxa) + z * COS(rxa)
  76.  
  77.    y = u
  78.    z = v
  79.  
  80.    u = x * COS(rya) - z * SIN(rya)
  81.    v = x * SIN(rya) + z * COS(rya)
  82.  
  83.    x = u
  84.    z = v
  85.  
  86.    x(xa) = INT(x / 128)
  87.    y(xa) = -INT(y / 128) - 1
  88.    z(xa) = INT(z / 128)
  89.  
  90.    t(xa) = INT(ya / 256)
  91.    xt(xa) = INT(xt + .99)
  92.  
  93.    REM PRINT x(xa),
  94.    REM PRINT y(xa),
  95.    REM PRINT z(xa),
  96.  
  97.    REM PRINT t(xa),
  98.    REM PRINT rxa,
  99.    REM PRINT rya
  100.  
  101.  NEXT xa
  102.  
  103.  FOR j = 0 TO n - .2 STEP .2
  104.  
  105.    rxa = (TAN((j - n / 2) / n * ATN(3.141592 / 2) * 2 - 3.141592)) / 3.141592 * n + n / 2
  106.    x1(rxa) = INT(j / 4)
  107.  
  108.  NEXT j
  109.  
  110.   REM FOR z = 0 TO n - 1
  111.   REM  PRINT x1(z), z
  112.   REM NEXT z
  113.  
  114. PRINT x$;
  115.  
  116.  FOR z = 0 TO n - 1 STEP 8
  117.  
  118.  
  119.      PRINT c$(x(z)); r$; c$(x(z + 1)); r$; c$(x(z + 2)); r$; c$(x(z + 3)); r$; c$(x(z + 4)); r$;
  120.      PRINT c$(x(z + 5)); r$; c$(x(z + 6)); r$; c$(x(z + 7))
  121.      IF z = 512 THEN PRINT fi$
  122.      IF z < n - 8 THEN PRINT b$;
  123.  
  124.  NEXT z
  125.  
  126. PRINT ed$
  127. PRINT
  128. PRINT y$;
  129.  
  130.  FOR z = 0 TO n - 1 STEP 8
  131.  
  132.      PRINT c$(y(z)); r$; c$(y(z + 1)); r$; c$(y(z + 2)); r$; c$(y(z + 3)); r$; c$(y(z + 4)); r$;
  133.      PRINT c$(y(z + 5)); r$; c$(y(z + 6)); r$; c$(y(z + 7))
  134.      IF z = 512 THEN PRINT fi$
  135.      IF z < n - 8 THEN PRINT b$;
  136.  
  137.  NEXT z
  138.  
  139. PRINT ed$
  140. PRINT
  141. PRINT z$;
  142.  
  143.  FOR z = 0 TO n - 1 STEP 8
  144.  
  145.      PRINT c$(z(z)); r$; c$(z(z + 1)); r$; c$(z(z + 2)); r$; c$(z(z + 3)); r$; c$(z(z + 4)); r$;
  146.      PRINT c$(z(z + 5)); r$; c$(z(z + 6)); r$; c$(z(z + 7))
  147.      IF z = 512 THEN PRINT fi$
  148.      IF z < n - 8 THEN PRINT b$;
  149.  
  150.  NEXT z
  151.  
  152. PRINT ed$
  153. PRINT
  154. PRINT t$;
  155.  
  156.  FOR z = 0 TO n - 1 STEP 8
  157.  
  158.      PRINT c$(t(z)); r$; c$(t(z + 1)); r$; c$(t(z + 2)); r$; c$(t(z + 3)); r$; c$(t(z + 4)); r$;
  159.      PRINT c$(t(z + 5)); r$; c$(t(z + 6)); r$; c$(t(z + 7))
  160.      IF z = 512 THEN PRINT fi$
  161.      IF z < n - 8 THEN PRINT b$;
  162.  
  163.  NEXT z
  164.  
  165. PRINT ed$
  166. PRINT
  167. PRINT q$;
  168.  
  169.  FOR z = 0 TO n - 1 STEP 8
  170.  
  171.      PRINT c$(x1(z)); r$; c$(x1(z + 1)); r$; c$(x1(z + 2)); r$; c$(x1(z + 3)); r$; c$(x1(z + 4)); r$;
  172.      PRINT c$(x1(z + 5)); r$; c$(x1(z + 6)); r$; c$(x1(z + 7))
  173.      IF z < n - 8 THEN PRINT b$;
  174.  
  175.  NEXT z
  176.  
  177. PRINT
  178. PRINT g$;
  179.  
  180.  FOR z = 0 TO n - 1 STEP 8
  181.  
  182.      PRINT c$(xt(z)); r$; c$(xt(z + 1)); r$; c$(xt(z + 2)); r$; c$(xt(z + 3)); r$; c$(xt(z + 4)); r$;
  183.      PRINT c$(xt(z + 5)); r$; c$(xt(z + 6)); r$; c$(xt(z + 7))
  184.      IF z = 512 THEN PRINT fi$
  185.      IF z < n - 8 THEN PRINT b$;
  186.  
  187.  NEXT z
  188.  
  189. PRINT ed$
  190. PRINT
  191.  
  192. FUNCTION c$ (qq)
  193.  
  194.  c$ = LTRIM$(RTRIM$(STR$(qq)))
  195.  
  196. END FUNCTION
  197.  
  198.